#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QLabel>
#include <QMainWindow>
#include <QMouseEvent>

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include "weatherdata.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    // 定义一个右键菜单
    QMenu *mExitMenu;

    // 定义退出行为 - 菜单项
    QAction *mExitAct;

    // 窗口移动时，鼠标与窗口左上角的偏移
    QPoint mOffset;

    // 天气数据
    Today mToday;
    Day mDay[6];

    // 星期和日期需要的 Label
    QList<QLabel *> mWeekList;
    QList<QLabel *> mDateList;

    // 天气和天气图标
    QList<QLabel *> mTypeList;
    QList<QLabel *> mTypeIconList;

    // 天气 和 图标映射关系
    QMap<QString, QString> mTypeMap;

    // 污染指数
    QList<QLabel *> mAqiList;

    // 风力和风向
    QList<QLabel *> mFxList;
    QList<QLabel *> mFlList;

    // Http请求相关
    QNetworkAccessManager *mNetAccessManager;

    // 获取天气数据
    void getWeatherInfo(QString cityCode);

    // 解析天气数据
    void parseJson(const QByteArray &byteArray);

    // 更新 UI
    void updateUI();

    // 绘制高低温曲线
    void paintHighCurve();
    void paintLowCurve();

public:
    // 重写菜单事件
    void contextMenuEvent(QContextMenuEvent *event) override;

    // 鼠标按下事件
    void mousePressEvent(QMouseEvent *event) override;

    // 鼠标移动事件
    void mouseMoveEvent(QMouseEvent *event) override;

    // 重写父类的 EventFilter 方法, 用于捕获标签的绘制事件
    bool eventFilter(QObject *watched, QEvent *event) override;



private slots:

    // 获取到网络响应调用的槽函数
    void onRelied_slot(QNetworkReply *reply);

    void on_btnSearch_clicked();
};
#endif // MAINWINDOW_H
